﻿using System;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using DG.Common.EF.WPF;
using DG.Common.Patterns.MVVM;
using TCC.ControleFluxoDeCaixa.Model.Contas;
using TCC.ControleFluxoDeCaixa.Model.Usuarios;

namespace TCC.ControleFluxoDeCaixa.Model.Fluxo.TranferenciaEntreContas
{
    public class TransferenciaEntreContas : NotifyViewModel
    {
        [Key]
        [Browsable(false)]
        public int TranferenciaEntreContasId { get; set; } 
        [Required]
        [Display(Name = @"Conta Remetente")]
        public virtual ContaFinanceira ContaRemetente { get; set; }
        [Required]
        [Display(Name = @"Conta Destinatária")]
        public virtual ContaFinanceira ContaDestinataria { get; set; }
        [Required]
        [Range(0.01,(double)decimal.MaxValue)]
        public decimal Valor { get; set; }
        [Required]
        public DateTime DataTransferencia { get; set; }

        [Required]
        [FilteredAtributte(false)]
        public virtual Lancamento LancamentoSaida { get; set; }
        [Required]
        [FilteredAtributte(false)]
        public virtual Lancamento LancamentoEntrada { get; set; }
        [Required]
        [FilteredAtributte(false)]
        public virtual Usuario Usuario { get; set; }

        public Lancamento TransferenciaSaida(Categoria categoria)
        {
            LancamentoSaida =  new Lancamento()
            {
                Categoria = categoria,
                DataDoLancamento = DataTransferencia,
                Usuario = ContaDestinataria.Usuario,
                Nome = "TRANSFERÊNCIA DE VALORES ENTRE CONTAS  " + "DE "
                + ContaRemetente + " PARA " + ContaDestinataria + "-" + "Valor Transferido: " + Valor
            };
            LancamentoSaida.Movimentos.Add(new Movimento()
            {
                Lancamento = LancamentoSaida,
                DataDoMovimento = DataTransferencia,
                TipoDeMovimento = TipoDeMovimento.Despesa,
                ValorAbsoluto = Valor,
                Conta = ContaRemetente
            });
            return LancamentoSaida;
        }
        public Lancamento TransferenciaEntrada(Categoria categoria)
        {
            LancamentoEntrada = new Lancamento()
            {
                Categoria = categoria,
                DataDoLancamento = DataTransferencia,
                Usuario = ContaRemetente.Usuario,
                Nome = "TRANSFERÊNCIA DE VALORES ENTRE CONTAS: " + "DE "
                + ContaRemetente + " PARA " + ContaDestinataria + "-" + "VALOR TRANSFERIDO: " + Valor
            };
            LancamentoEntrada.Movimentos.Add(new Movimento()
            {
                Lancamento = LancamentoEntrada,
                DataDoMovimento = DataTransferencia,
                TipoDeMovimento = TipoDeMovimento.Receita,
                ValorAbsoluto = Valor,
                Conta = ContaDestinataria
            });
            return LancamentoEntrada;
        }

    }
}
